Genome engineering can refer to altering the genome by deleting, inserting, mutating, or substituting specific nucleic acid sequences. The altering can be gene or location specific. Genome engineering can use nucleases to cut a nucleic acid thereby generating a site for the alteration. Engineering of non-genomic nucleic acid is also contemplated. A protein containing a nuclease domain can bind and cleave a target nucleic acid by forming a complex with a nucleic acid-targeting nucleic acid. In one example, the cleavage can introduce double-stranded breaks in the target nucleic acid. A nucleic acid can be repaired, e.g., by endogenous non-homologous end joining (NHEJ) machinery. In a further example, a piece of nucleic acid can be inserted. Modifications of nucleic acid-targeting nucleic acids and site-directed polypeptides can introduce new functions to be used for genome engineering.